package cn.zl.GB28181.storage;

import cn.zl.GB28181.core.SipTransactionInfo;
import cn.zl.GB28181.core.SyncStatus;
import cn.zl.common.CommonCallback;
import cn.zl.model.Device;

public interface IDeviceStorage {

    /**
     * 通过设备编号获取设备信息
     * 先从缓存获取 缓存为空->查询数据库并添加到缓存
     */
    Device getDevice(String deviceId);

    /**
     * 更新设备
     * @param device 设备信息
     */
    void updateDevice(Device device);

    /**
     * 设备上线
     *
     * @param device 设备信息
     */
    void online(Device device, SipTransactionInfo sipTransactionInfo);

    /**
     * 设备下线
     *
     * @param deviceId 设备编号
     */
    void offline(String deviceId, String reason);
    /**
     * 添加目录订阅
     * @param device 设备信息
     * @return 布尔
     */
    boolean addCatalogSubscribe(Device device);

    /**
     * 移除目录订阅
     * @param device 设备信息
     * @return 布尔
     */
    boolean removeCatalogSubscribe(Device device, CommonCallback<Boolean> callback);

    /**
     * 获取通道同步状态
     * @param deviceId 设备编号
     * @return 同步状态
     */
    SyncStatus getChannelSyncStatus(String deviceId);

    /**
     * 查看是否仍在同步
     * @param deviceId 设备编号
     * @return 布尔
     */
    Boolean isSyncRunning(String deviceId);

    /**
     * 通道同步
     * @param device 设备信息
     */
    void sync(Device device);

}
